home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / share / gst-python / 0.10 / examples / fvumeter.pyc (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2009-04-20  |  6.1 KB  |  154 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. import gtk
  5. from gtk import gdk
  6. import gobject
  7.  
  8. class FVUMeter(gtk.DrawingArea):
  9.     __gsignals__ = {
  10.         'expose-event': 'override',
  11.         'size-allocate': 'override',
  12.         'size-request': 'override',
  13.         'realize': 'override' }
  14.     __gproperties__ = {
  15.         'peak': (gobject.TYPE_FLOAT, 'peak volume level', 'peak volume level in dB', -90, 0, -90, gobject.PARAM_READWRITE),
  16.         'decay': (gobject.TYPE_FLOAT, 'decay volume level', 'decay volume level in dB', -90, 0, -90, gobject.PARAM_READWRITE),
  17.         'orange-threshold': (gobject.TYPE_FLOAT, 'threshold for orange', 'threshold for orange use in dB', -90, 0, -10, gobject.PARAM_READWRITE),
  18.         'red-threshold': (gobject.TYPE_FLOAT, 'threshold for red', 'threshold for red use in dB', -90, 0, -1, gobject.PARAM_READWRITE) }
  19.     green_gc = None
  20.     orange_gc = None
  21.     red_gc = None
  22.     yellow_gc = None
  23.     topborder = 7
  24.     peaklevel = -90
  25.     decaylevel = -90
  26.     orange_threshold = -10
  27.     red_threshold = -1
  28.     bottomborder = 25
  29.     leftborder = 15
  30.     rightborder = 65
  31.     
  32.     def iec_scale(self, db):
  33.         pct = 0
  34.         if db < -70:
  35.             pct = 0
  36.         elif db < -60:
  37.             pct = (db + 70) * 0.25
  38.         elif db < -50:
  39.             pct = (db + 60) * 0.5 + 2.5
  40.         elif db < -40:
  41.             pct = (db + 50) * 0.75 + 7.5
  42.         elif db < -30:
  43.             pct = (db + 40) * 1.5 + 15
  44.         elif db < -20:
  45.             pct = (db + 30) * 2 + 30
  46.         elif db < 0:
  47.             pct = (db + 20) * 2.5 + 50
  48.         else:
  49.             pct = 100
  50.         return pct
  51.  
  52.     
  53.     def do_get_property(self, property):
  54.         if property.name == 'peak':
  55.             return self.peaklevel
  56.         if property.name == 'decay':
  57.             return self.decaylevel
  58.         if property.name == 'orange-threshold':
  59.             return self.orange_threshold
  60.         if property.name == 'red-threshold':
  61.             return self.red_threshold
  62.         raise AttributeError, 'unknown property %s' % property.name
  63.  
  64.     
  65.     def do_set_property(self, property, value):
  66.         if property.name == 'peak':
  67.             self.peaklevel = value
  68.         elif property.name == 'decay':
  69.             self.decaylevel = value
  70.         elif property.name == 'orange-threshold':
  71.             self.orange_threshold = value
  72.         elif property.name == 'red-threshold':
  73.             self.red_threshold = value
  74.         else:
  75.             raise AttributeError, 'unknown property %s' % property.name
  76.         (property.name == 'peak').queue_draw()
  77.  
  78.     
  79.     def do_size_request(self, requisition):
  80.         requisition.width = 250
  81.         requisition.height = 50
  82.  
  83.     
  84.     def do_size_allocate(self, allocation):
  85.         self.allocation = allocation
  86.         if self.flags() & gtk.REALIZED:
  87.             self.window.move_resize(*allocation)
  88.         
  89.  
  90.     
  91.     def do_realize(self):
  92.         self.set_flags(self.flags() | gtk.REALIZED)
  93.         self.window = gdk.Window(self.get_parent_window(), width = self.allocation.width, height = self.allocation.height, window_type = gdk.WINDOW_CHILD, wclass = gdk.INPUT_OUTPUT, event_mask = self.get_events() | gdk.EXPOSURE_MASK)
  94.         colormap = gtk.gdk.colormap_get_system()
  95.         green = colormap.alloc_color(0, 65535, 0)
  96.         orange = colormap.alloc_color(65535, 32768, 0)
  97.         red = colormap.alloc_color(65535, 0, 0)
  98.         yellow = colormap.alloc_color(65535, 65535, 0)
  99.         self.green_gc = gdk.GC(self.window, foreground = green)
  100.         self.orange_gc = gdk.GC(self.window, foreground = orange)
  101.         self.red_gc = gdk.GC(self.window, foreground = red)
  102.         self.yellow_gc = gdk.GC(self.window, foreground = yellow)
  103.         self.window.set_user_data(self)
  104.         self.style.attach(self.window)
  105.         self.style.set_background(self.window, gtk.STATE_NORMAL)
  106.  
  107.     
  108.     def do_expose_event(self, event):
  109.         self.chain(event)
  110.         (x, y, w, h) = self.allocation
  111.         vumeter_width = w - (self.leftborder + self.rightborder)
  112.         vumeter_height = h - (self.topborder + self.bottomborder)
  113.         self.window.draw_rectangle(self.style.black_gc, True, self.leftborder, self.topborder, vumeter_width, vumeter_height)
  114.         peaklevelpct = self.iec_scale(self.peaklevel)
  115.         peakwidth = int(vumeter_width * (peaklevelpct / 100))
  116.         draw_gc = self.green_gc
  117.         if self.peaklevel >= self.orange_threshold:
  118.             draw_gc = self.orange_gc
  119.         
  120.         if self.peaklevel >= self.red_threshold:
  121.             draw_gc = self.red_gc
  122.         
  123.         if peakwidth > 0:
  124.             self.window.draw_rectangle(draw_gc, True, self.leftborder, self.topborder, peakwidth, vumeter_height)
  125.         
  126.         if self.decaylevel > -90:
  127.             decaylevelpct = self.iec_scale(self.decaylevel)
  128.             decaywidth = int(vumeter_width * (decaylevelpct / 100))
  129.             if decaywidth == 0:
  130.                 decaywidth = 1
  131.             
  132.             self.window.draw_line(self.yellow_gc, self.leftborder + decaywidth - 1, self.topborder, self.leftborder + decaywidth - 1, self.topborder + vumeter_height - 1)
  133.         
  134.         scalers = [
  135.             ('-90', 0),
  136.             ('-40', 0.15),
  137.             ('-30', 0.3),
  138.             ('-20', 0.5),
  139.             ('-10', 0.75),
  140.             ('-5', 0.875),
  141.             ('0', 1)]
  142.         for level, scale in scalers:
  143.             self.window.draw_line(self.style.black_gc, self.leftborder + int(scale * (vumeter_width - 1)), h - self.bottomborder, self.leftborder + int(scale * (vumeter_width - 1)), (h - self.bottomborder) + 5)
  144.             layout = self.create_pango_layout(level)
  145.             (layout_width, layout_height) = layout.get_pixel_size()
  146.             self.window.draw_layout(self.style.black_gc, self.leftborder + int(scale * vumeter_width) - int(layout_width / 2), (h - self.bottomborder) + 7, layout)
  147.         
  148.         layout = self.create_pango_layout('%.2fdB' % self.peaklevel)
  149.         (layout_width, layout_height) = layout.get_pixel_size()
  150.         self.window.draw_layout(self.style.black_gc, self.leftborder + vumeter_width + 5, self.topborder + int(vumeter_height / 2 - layout_height / 2), layout)
  151.  
  152.  
  153. gobject.type_register(FVUMeter)
  154.